﻿using BLL;
using DTO;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace BONGDA
{
    public partial class frmLapLichThiDau : Form
    {
        public frmLapLichThiDau()
        {
            InitializeComponent();
        }
        int soDoi = 0;
        private void frmLapLichThiDau_Load(object sender, EventArgs e)
        {
            LoadCombobox();
            DataTable table = DoiBong_BLL.SelectAll();
            lblSoLuongDoiBong.Text = table.Rows.Count.ToString();
            soDoi = Convert.ToInt32(table.Rows.Count.ToString());
            DateTime time = dtpBatDau.Value.AddDays(
                            (soDoi * 2 * 7)/Convert.ToInt32(cboSoTranTrongTuan.SelectedItem));
            txtThoiGianKetThucGiai.Text = time.Day + "/" + time.Month + "/" + time.Year;
        }
        private void LoadCombobox()
        {
            for (int i = 12; i <= 21; i++)
            {                
                cboThoiGianThichHop.Items.Add(i + ":00");
            }
            cboThoiGianThichHop.SelectedIndex = 1;
            for (int i = 0; i < 2; i++)
            {
                cboSoTranTrongTuan.Items.Add(i + 1);
            }
            cboSoTranTrongTuan.SelectedIndex = 1;
        }


        private void btnThucHien_Click(object sender, EventArgs e)
        {
            // Xóa lịch củ
            DialogResult kq;
            kq = MessageBox.Show("Nếu tiếp tục, Lịch thi đấu củ sẻ bị xóa", "Thông báo",
            MessageBoxButtons.OKCancel, MessageBoxIcon.Question);
            if (kq == DialogResult.Cancel)
            {
                this.Close();
                return;
            }
            LichThiDau_BLL.Delete();
            // Lập lịch mới
            DataTable table = DoiBong_BLL.SelectAll();
            soDoi = Convert.ToInt32(table.Rows.Count.ToString());
            int soVong = (soDoi / 2 + soDoi % 2) * 2 - 1;
            // Xep lich theo luot

            //////////////////////////////////////////
            // Luot di
            // Thêm 20 đội bóng vào list
            List<int> team = new List<int>();

            for (int i = 0; i < soDoi; i++)
            {
                team.Add(Convert.ToInt32(table.Rows[i]["MaDoiBong"]));
            }
            // random list
            Random rand = new Random();
            for (int i = 0; i < team.Count; i++)
            {
                int rran = rand.Next(0, team.Count - 1);
                int tam = team[i];
                team[i] = team[rran];
                team[rran] = tam;
            }
            // Xep lich theo vong
            for (int r = 0; r < soVong; r++)
            {
                // In ra các cặp thi đấu cho vòng hiện tại
                for (int i = 0, j = soDoi - 1; i < j; ++i, --j)
                {
                    LichThiDau_DTO dtoTranDau = new LichThiDau_DTO();
                    dtoTranDau.VongDau = r + 1;
                    dtoTranDau.Ngay = dtpBatDau.Value.AddDays(7 * dtoTranDau.VongDau / Convert.ToInt32(cboSoTranTrongTuan.SelectedItem));
                    dtoTranDau.Gio = cboThoiGianThichHop.SelectedItem.ToString();
                    dtoTranDau.Doi1 = team[i];
                    dtoTranDau.Doi2 = team[j];
                    DoiBong_DTO dtoDoiBong = DoiBong_BLL.SelectByID(team[i]);
                    dtoTranDau.San = dtoDoiBong.MaSan;
                    LichThiDau_BLL.Insert(dtoTranDau);
                }

                // Tạo vòng đấu tiếp theo
                int tam = team[0];
                for (int i = 0; i < soDoi - 1; i++)
                {
                    team[i] = team[i + 1];
                }
                team[soDoi - 1] = tam;
            }

            //////////////////////////////////////////
            // Luot Ve
            // random list
            for (int i = 0; i < team.Count; i++)
            {
                int rran = rand.Next(0, team.Count - 1);
                int tam = team[i];
                team[i] = team[rran];
                team[rran] = tam;
            }
            // Xep lich theo vong
            for (int r = 0; r < soVong; r++)
            {
                // In ra các cặp thi đấu cho vòng hiện tại
                for (int i = 0, j = soDoi - 1; i < j; ++i, --j)
                {
                    LichThiDau_DTO dtoTranDau = new LichThiDau_DTO();
                    dtoTranDau.VongDau = r + soVong + 1;
                    dtoTranDau.Ngay = dtpBatDau.Value.AddDays(7 * dtoTranDau.VongDau / Convert.ToInt32(cboSoTranTrongTuan.SelectedItem));
                    dtoTranDau.Gio = cboThoiGianThichHop.SelectedItem.ToString();
                    // kiem tra luot di
                    if (soDoi%2 == 0)
                    {
                        dtoTranDau.Doi1 = team[i];
                        dtoTranDau.Doi2 = team[j];
                    }
                    else
                    {
                        LichThiDau_DTO dtoLich = LichThiDau_BLL.SelectbyDoiBong(team[i], team[j]);
                        dtoTranDau.Doi1 = dtoLich.Doi2;
                        dtoTranDau.Doi2 = dtoLich.Doi1;
                    }
                    DoiBong_DTO dtoDoiBong = DoiBong_BLL.SelectByID(dtoTranDau.Doi1);
                    dtoTranDau.San = dtoDoiBong.MaSan;
                    LichThiDau_BLL.Insert(dtoTranDau);
                }

                // Tạo vòng đấu tiếp theo
                int tam = team[0];
                for (int i = 0; i < soDoi - 1; i++)
                {
                    team[i] = team[i + 1];
                }
                team[soDoi - 1] = tam;
            }
            MessageBox.Show("Lập lịch thi đấu thành công!", "Thông báo",
                        MessageBoxButtons.OK, MessageBoxIcon.Information);
            this.Close();
        }

        private void btnThoat_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        private void dtpBatDau_ValueChanged(object sender, EventArgs e)
        {
            DateTime time = dtpBatDau.Value.AddDays(
                            (soDoi * 2 * 7) / Convert.ToInt32(cboSoTranTrongTuan.SelectedItem));
            txtThoiGianKetThucGiai.Text = time.Day + "/" + time.Month + "/" + time.Year;
        }
    }
}
